using namespace std;

#include "ConsumidorAccionesAEjecutar.h"

ConsumidorAccionesAEjecutar::ConsumidorAccionesAEjecutar(bool atributo) : Thread(atributo){
	this->juego	=	Partida::getInstance();
}

ConsumidorAccionesAEjecutar::~ConsumidorAccionesAEjecutar() {
	free(this);
}

//Manejador de señales de interrupcion.
void ConsumidorAccionesAEjecutar::signalHandler(int signal){
	if(signal == SIGABRT){
		//Informo la finalizacion por sysout
		cout << "[INFO] - Se cierra el hilo ejecutor de acciones encoladas. "<< endl;
		//Cierro el thread.
		pthread_exit(NULL);
	}
}

void ConsumidorAccionesAEjecutar::run (){
	//Me attacho a la señal que envia el server para finalizar.
	signal(SIGABRT, ConsumidorAccionesAEjecutar::signalHandler);
	signal(SIGURG, ConsumidorAccionesAEjecutar::signalHandler);
	signal(SIGFPE, ConsumidorAccionesAEjecutar::signalHandler);
	signal(SIGILL, ConsumidorAccionesAEjecutar::signalHandler);
	signal(SIGTERM, ConsumidorAccionesAEjecutar::signalHandler);

	/* Mientras la partida este activa */
	while (Partida::getInstance()->isActivo() && !Partida::getInstance()->isFinTorneo()) {
		/* Solicito al singleton que procese el siguiente evento en la cola. */
		Partida::getInstance()->procesarAccion();
		/* Doy un lapso del tiempo del juego antes de seguir. */
		usleep(30000);
	}

	/* Cierro el thread. */
	pthread_exit(NULL);
}
	
